#include "wx/wxprec.h"
#include "wx/ipcbase.h"

IMPLEMENT_CLASS( wxServerBase, wxObject )
IMPLEMENT_CLASS( wxClientBase, wxObject )
IMPLEMENT_CLASS( wxConnectionBase, wxObject )

wxConnectionBase::wxConnectionBase( wxChar *buffer, int bytes )
  : m_connected( true ), m_buffer( buffer ), m_buffersize( bytes ), m_deletebufferwhendone( false ) {
  if( buffer == ( wxChar * )NULL ) {
    m_buffersize = 0;
    m_deletebufferwhendone = true;
  }
}

wxConnectionBase::wxConnectionBase()
  : m_connected( true ), m_buffer( NULL ), m_buffersize( 0 ), m_deletebufferwhendone( true ) {
}

wxConnectionBase::wxConnectionBase( const wxConnectionBase& copy )
  : wxObject(), m_connected( copy.m_connected ), m_buffer( copy.m_buffer ), m_buffersize( copy.m_buffersize ),
    m_deletebufferwhendone( false ) {
  wxFAIL_MSG( _T( "Copy constructor of wxConnectionBase not implemented" ) );
}


wxConnectionBase::~wxConnectionBase( void ) {
  if( m_deletebufferwhendone ) {
    delete [] m_buffer;
  }
}

wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes ) {
  if( m_buffersize >= bytes ) {
    return m_buffer;
  } else {
    if( m_deletebufferwhendone ) {
      delete [] m_buffer;
      m_buffer = new wxChar[( bytes + sizeof( wxChar ) - 1 ) / sizeof( wxChar )];
      m_buffersize = bytes;
      return m_buffer;
    } else {
      return NULL;
    }
  }
}
